<?php
namespace Common\Alipay;
header("Content-type: text/html; charset=utf-8");

require_once 'pc/pagepay/service/AlipayTradeService.php';
require_once 'pc/pagepay/buildermodel/AlipayTradePagePayContentBuilder.php';
require_once 'pc/pagepay/buildermodel/AlipayTradeCloseContentBuilder.php';
require_once 'pc/pagepay/buildermodel/AlipayTradeQueryContentBuilder.php';
require_once 'pc/pagepay/buildermodel/AlipayTradeRefundContentBuilder.php';
require_once 'pc/pagepay/buildermodel/AlipayTradeFastpayRefundQueryContentBuilder.php';
class Pcpay{
	
	//支付
	public static function pay($out_trade_no,$subject,$total_amount,$body){
		
    	//商户订单号，商户网站订单系统中唯一订单号，必填
	    $out_trade_no = trim($out_trade_no);
	    //订单名称，必填
	    $subject = trim($subject);
	    //付款金额，必填
	    $total_amount = trim($total_amount);
	    //商品描述，可空
	    $body = trim($body);

		//构造参数
		$payRequestBuilder = new \AlipayTradePagePayContentBuilder();
		
		$payRequestBuilder->setBody($body);
		$payRequestBuilder->setSubject($subject);
		$payRequestBuilder->setTotalAmount($total_amount);
		$payRequestBuilder->setOutTradeNo($out_trade_no);
		$aop = new \AlipayTradeService(C('config'));
		
		/**
		 * pagePay 电脑网站支付请求
		 * @param $builder 业务参数，使用buildmodel中的对象生成。
		 * @param $return_url 同步跳转地址，公网可以访问
		 * @param $notify_url 异步通知地址，公网可以访问
		 * @return $response 支付宝返回的信息
	 	*/
		$response = $aop->pagePay($payRequestBuilder,C('config.return_url'),C('config.notify_url'));
		//输出表单
		return $response;
	}

	//交易关闭
	public static function code($out_trade_no,$trade_no){
		 //商户订单号，商户网站订单系统中唯一订单号
	    $out_trade_no = trim($out_trade_no);
	
	    //支付宝交易号
	    $trade_no = trim($trade_no);
	    //请二选一设置
	
		//构造参数
		$RequestBuilder=new \AlipayTradeCloseContentBuilder();
		$RequestBuilder->setOutTradeNo($out_trade_no);
		$RequestBuilder->setTradeNo($trade_no);
	
		$aop = new \AlipayTradeService(C('config'));
	
		/**
		 * alipay.trade.close (统一收单交易关闭接口)
		 * @param $builder 业务参数，使用buildmodel中的对象生成。
		 * @return $response 支付宝返回的信息
		 */
		$response = $aop->Close($RequestBuilder);
		return $response;
	}
	
	//交易查询
	public static function query($out_trade_no,$trade_no){
		//商户订单号，商户网站订单系统中唯一订单号
	    $out_trade_no = trim($out_trade_no);
	
	    //支付宝交易号
	    $trade_no = trim($trade_no);
	    //请二选一设置
	    //构造参数
		$RequestBuilder = new \AlipayTradeQueryContentBuilder();
		$RequestBuilder->setOutTradeNo($out_trade_no);
		$RequestBuilder->setTradeNo($trade_no);
	
		$aop = new \AlipayTradeService(C('config'));
		
		/**
		 * alipay.trade.query (统一收单线下交易查询)
		 * @param $builder 业务参数，使用buildmodel中的对象生成。
		 * @return $response 支付宝返回的信息
	 	 */
		$response = $aop->Query($RequestBuilder);
		return $response;
	}
	
	
	//退款
	public static function refund($out_trade_no,$trade_no,$refund_amount,$refund_reason,$out_request_no){
		//商户订单号，商户网站订单系统中唯一订单号
	    $out_trade_no = trim($out_trade_no);
	
	    //支付宝交易号
	    $trade_no = trim($trade_no);
	    //请二选一设置
	
	    //需要退款的金额，该金额不能大于订单金额，必填
	    $refund_amount = trim($refund_amount);
	
	    //退款的原因说明
	    $refund_reason = trim($refund_reason);
	
	    //标识一次退款请求，同一笔交易多次退款需要保证唯一，如需部分退款，则此参数必传
	    $out_request_no = trim($out_request_no);
	
	    //构造参数
		$RequestBuilder=new \AlipayTradeRefundContentBuilder();
		$RequestBuilder->setOutTradeNo($out_trade_no);
		$RequestBuilder->setTradeNo($trade_no);
		$RequestBuilder->setRefundAmount($refund_amount);
		$RequestBuilder->setOutRequestNo($out_request_no);
		$RequestBuilder->setRefundReason($refund_reason);
	
		$aop = new \AlipayTradeService(C('config'));
		
		/**
		 * alipay.trade.refund (统一收单交易退款接口)
		 * @param $builder 业务参数，使用buildmodel中的对象生成。
		 * @return $response 支付宝返回的信息
		 */
		$response = $aop->Refund($RequestBuilder);
		return $response;
	}
	//退款查询
	public static function refundquery($out_trade_no,$trade_no,$out_request_no){
		//商户订单号，商户网站订单系统中唯一订单号
	    $out_trade_no = trim($out_trade_no);
	
	    //支付宝交易号
	    $trade_no = trim($trade_no);
	    //请二选一设置
	
	    //请求退款接口时，传入的退款请求号，如果在退款请求时未传入，则该值为创建交易时的外部交易号，必填
	    $out_request_no = trim($out_request_no);
	
	    //构造参数
		$RequestBuilder=new \AlipayTradeFastpayRefundQueryContentBuilder();
		$RequestBuilder->setOutTradeNo($out_trade_no);
		$RequestBuilder->setTradeNo($trade_no);
		$RequestBuilder->setOutRequestNo($out_request_no);
	
		$aop = new \AlipayTradeService(C('config'));
		
		/**
		 * 退款查询   alipay.trade.fastpay.refund.query (统一收单交易退款查询)
		 * @param $builder 业务参数，使用buildmodel中的对象生成。
		 * @return $response 支付宝返回的信息
		 */
		$response = $aop->refundQuery($RequestBuilder);
		return $response;
	}
	
	//异步
	public static function notify_url($data){
		$arr=$data;
		$alipaySevice = new \AlipayTradeService(C('config')); 
		$alipaySevice->writeLog(var_export($arr,true));
		$result = $alipaySevice->check($arr);
		return $result;
		
	}
	
	//同步
	public static function return_url($data){
		$arr=$data;
		$alipaySevice = new \AlipayTradeService(C('config')); 
		$result = $alipaySevice->check($arr);
		return $result;
		
	}
	
}

?>